How to apply difficult logic for a column in pandas